#ifndef TORRENTPARSER_H_
#define TORRENTPARSER_H_

#include <string>
#include <iostream>
#include <istream>
#include <fstream>
#include <vector>

#define TAM_HASH 20
using namespace std;

class ElementoBencode;
class CadenaBencode;
class DiccionarioBencode;
class IntegerBencode;
class ListaBencode;
class TorrentInfo;
class BencodeParser;
class Sha1;

class TorrentParser {

public:

	/* Pre:-
	 * Pos: Crea una nueva instancia de TorrentParser
	 */
	TorrentParser();

	/*
	 * Pre: El path debe corresponder a un archivo torrent valido.
	 * Pos: Se crea una instancia de TorrentInfo que contiene la informacion el archivo.
	 */
	TorrentInfo* parsear(const string &path);

	/* Libera los recursos instanciados*/
	virtual ~TorrentParser();

private:

	/* Pre: el archivo sea valido y se encuentre abierto.
	 * Pos: devuelve un string con el contenido del archivo.
	 */
	string deArchivoAString(ifstream* archivo);

	/* Pre: el argumento sea valido y su longitud sea multiplo de 20
	 * Pos: devuelve un vector donde cada componente es una subcadena
	 * de la cadena pasada por argumento.
	 */
	vector<string> getHashes(const string &hashes);

	string getHashArchivo(stringstream &stream, const BencodeParser &parser);
};

#endif /* TORRENTPARSER_H_ */
